Field
Embodiments relate to the field of instruction trace. In particular, embodiments relate to the field of real time instruction trace in processors.
Background Information
Multi-threaded and/or multi-core processors are commonplace today. They are used in various types of computing devices such as servers, desktops, laptops, netbooks, tablets, smartphones, and cell phones, to name just a few examples. It is currently expected that, at least for some processor segments, the trend to increasingly more threads and/or cores is going to continue into the future.
The multiple threads and/or cores generally help to improve performance by providing hardware parallelism which allows more instructions to be executed concurrently or in parallel. The multiple threads and/or cores have encouraged the development of multi-threaded or parallel processing software. For example, a multi-threaded application may include multiple threads that execute concurrently on different hardware threads, cores, or other logical processors.
During the execution of software various different types of events may alter the control flow of the software. Examples of such events include the execution of conditional branch instructions, jump instructions, subroutine call instructions, and asynchronous events (e.g., interrupts, exceptions, etc.). Tracing is often used to log or record information about the execution of software including information describing the control flow.
However, one challenge especially with such multi-threaded and/or multi-core processors is that debug tends to be more difficult as compared to single-threaded and/or single-core processors. Knowing the real time code execution flow is often challenging. As a result, debug may tend to take more time, which may lead to higher development costs and/or potential delays in bringing products to market. In addition, many existing methods of tracing tend to be highly performance intrusive.